package com.styytech.dadabao;

import android.app.Activity;
import android.app.Application;
import android.content.Context;
import android.graphics.Bitmap;
import android.widget.ImageView;

import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;
import com.nostra13.universalimageloader.cache.memory.impl.UsingFreqLimitedMemoryCache;
import com.nostra13.universalimageloader.cache.memory.impl.WeakMemoryCache;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.assist.ImageScaleType;
import com.nostra13.universalimageloader.core.assist.QueueProcessingType;
import com.nostra13.universalimageloader.core.display.RoundedBitmapDisplayer;
import com.nostra13.universalimageloader.core.download.BaseImageDownloader;
import com.nostra13.universalimageloader.utils.StorageUtils;

import java.io.File;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 * Created by User on 2015/7/17.
 */
public class DadaApplication extends Application{

    public static List<Activity> list_activity;
    public static Context contextApplication;
    public static int pci_numbers=9;
    public void onCreate() {
        super.onCreate();
        contextApplication = this.getApplicationContext();
        list_activity = new ArrayList<Activity>();
        initImageCache();
    }
    /**
     * 初始化图片缓存相关设置
     */
    private void initImageCache() {
        // 设置缓存的目录
        File cacheDir = StorageUtils.getOwnCacheDirectory(
                getApplicationContext(), "imageloader/Cache");
        // 构建配置信息
        ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(
                contextApplication)
                // .memoryCacheExtraOptions(480, 800)
                // max width, max height，即保存的每个缓存文件的最大长宽
                .threadPoolSize(4)
                        // 线程池内加载的数量
                .threadPriority(Thread.MIN_PRIORITY + 3)
                .denyCacheImageMultipleSizesInMemory()
                .memoryCache(new UsingFreqLimitedMemoryCache(2 * 1024 * 1024))
                .memoryCache(new WeakMemoryCache())
                        // You can pass your own memory cache
                        // implementation/你可以通过自己的内存缓存实现
                .memoryCacheSize(2 * 1024 * 1024)
                .discCacheSize(50 * 1024 * 1024)
                .discCacheFileNameGenerator(new Md5FileNameGenerator())
                        // 将保存的时候的URI名称用MD5 加密
                .tasksProcessingOrder(QueueProcessingType.LIFO)
                .discCacheFileCount(100)
                        // 缓存的文件数量
                        // .discCache(new UnlimitedDiscCache(cacheDir))
                        // 自定义缓存路径
                .defaultDisplayImageOptions(DisplayImageOptions.createSimple())
                .imageDownloader(
                        new BaseImageDownloader(contextApplication, 10 * 1000,
                                30 * 1000))// connectTimeout (5 s), readTimeout
                        // (30 s)超时时间
                .build();// 开始构建

        /** 图片的各种格式DisplayImageOptions 的设置 */

        ImageLoader.getInstance().init(config);// 全局初始化此配置
    }

    /**
     * 设置图片
     */
    public static void showImage(String imageUrl, ImageView imageView,
                                 int LoadingImageId, int cornerRadiusPixels) {
        DisplayImageOptions options;
        options = new DisplayImageOptions.Builder()
                .showImageForEmptyUri(LoadingImageId)// 设置图片Uri为空或是错误的时候显示的图片
                .showImageOnFail(LoadingImageId) // 设置图片加载/解码过程中错误时候显示的图片
                .cacheInMemory(true)// 设置下载的图片是否缓存在内存中
                .cacheOnDisc(true)// 设置下载的图片是否缓存在SD卡中
                .imageScaleType(ImageScaleType.IN_SAMPLE_INT)// 设置图片以如何的编码方式显示
                .bitmapConfig(Bitmap.Config.RGB_565)// 设置图片的解码类型//
                .resetViewBeforeLoading(true)// 设置图片在下载前是否重置，复位
                .displayer(new RoundedBitmapDisplayer(cornerRadiusPixels))// 是否设置为圆角，弧度为多少
                        // .displayer(new FadeInBitmapDisplayer(100))// 是否图片加载好后渐入的动画时间
                .build();// 构建完成

        ImageLoader.getInstance().displayImage(imageUrl, imageView, options);
    }
    /**
     * 设置图片
     */
    public static void showImage(String imageUrl, ImageView imageView,
                                 int LoadingImageId, int cornerRadiusPixels,boolean inMemoty) {
        DisplayImageOptions options;
        options = new DisplayImageOptions.Builder()
                .showImageForEmptyUri(LoadingImageId)// 设置图片Uri为空或是错误的时候显示的图片
                .showImageOnFail(LoadingImageId) // 设置图片加载/解码过程中错误时候显示的图片
                .cacheInMemory(inMemoty)// 设置下载的图片是否缓存在内存中
                .cacheOnDisc(inMemoty)// 设置下载的图片是否缓存在SD卡中
                .imageScaleType(ImageScaleType.IN_SAMPLE_INT)// 设置图片以如何的编码方式显示
                .bitmapConfig(Bitmap.Config.RGB_565)// 设置图片的解码类型//
                .resetViewBeforeLoading(true)// 设置图片在下载前是否重置，复位
                .displayer(new RoundedBitmapDisplayer(cornerRadiusPixels))// 是否设置为圆角，弧度为多少
                        // .displayer(new FadeInBitmapDisplayer(100))// 是否图片加载好后渐入的动画时间
                .build();// 构建完成

        ImageLoader.getInstance().displayImage(imageUrl, imageView, options);
    }
    public static void addActivity(Activity activity) {
        list_activity.add(activity);
    }

    public static void exit() {
        Iterator<Activity> localIterator = DadaApplication.list_activity
                .iterator();
        while (localIterator.hasNext())
            ((Activity) localIterator.next()).finish();
    }
    public static Context getContext() {
        return contextApplication;
    }
}
